
package cn.tedu.ems.ex.handler;

import cn.tedu.ems.ex.ServiceException;
import cn.tedu.ems.web.JsonResult;
import cn.tedu.ems.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@Slf4j
@ControllerAdvice
@RestControllerAdvice
public class GlobalExceptionHandler {

    public GlobalExceptionHandler() {
        log.debug("创建全局异常处理对象:GlobalExceptionHandler");
    }

    @ExceptionHandler
    public JsonResult<Void> handlerServiceException(ServiceException e) {
        log.debug("开始统一处理ServiceException---已经存在的异常");
        return JsonResult.fail(e);
    }

    @ExceptionHandler
    public JsonResult<Void> handlerBindException(BindException e) {
        log.debug("开始处理BindException----检查不通过的异常");

        String defaultMessage = e.getFieldError().getDefaultMessage();//Spring框架提供的API,直接获取某一个错误信息

        return JsonResult.fail(ServiceCode.ERR_BAD_REQUEST, defaultMessage);//调用JsonResult中的fail()方法,转传入入自定义的枚举属性和处理后的提示错误信息
    }

    /**
     * 全局异常处理
     * @param e 全局的异常类
     * @return 返回异常处理反馈的信息
     */
//    @ExceptionHandler
//    public String handlerThrowable(Throwable e){
//        log.debug("这是一个Throwable异常,将统一处理");
//        return e.getMessage();
//    }
}
